// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token变量
let baseUrl=process.env.NODE_ENV ==='production'?'http://localhost:8082':'https://course.xiejr.com:444/api';
const install = (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: baseUrl,
		loadingText: '努力加载中~',
		loadingTime: 800,
		header: {
				'content-type': 'application/json;charset=UTF-8'
			},
			dataType: 'json',
			loadingMask: true, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
		// ......
	});
	
	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// 引用token
		// 方式一，存放在vuex的token，假设使用了uView封装的vuex方式
		// 见：https://uviewui.com/components/globalVariable.html
		// config.header.token = vm.token;
		
		// 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取
		// config.header.token = vm.$store.state.token;
		
		// 方式三，如果token放在了globalData，通过getApp().globalData获取
		// config.header.token = getApp().globalData.username;
		
		// 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的
		// 所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值
		// const token = uni.getStorageSync('token');
		// config.header.token = token;
		let token=uni.getStorageSync('userinfo').token;
		if(!Vue.prototype.$u.test.isEmpty(token)){
			config.header.Token = token;
		}
		return config;
	}
	
	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		if(res.code == 200) {
			// res为服务端返回值，可能有code，result等字段
			// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
			// 如果配置了originalData为true，请留意这里的返回值
			return res.data;
		}  else {
			let error=res.error;
			console.log(error)
			// 如果返回false，则会调用Promise的reject回调，
			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
			uni.showModal({
				title:'温馨提示',
				content:`接口请求失败:${error}`,
				showCancel:false,
				cancelColor:'#555555',
				confirmText:'确定',
				confirmColor:'#DD524D',
			})
			return false;
		}
	}
}

export default {
	install
}